package main.java.fases;



import java.util.Collection;
import java.util.Set;
import java.util.Vector;

import main.java.cartas.Carta;
import main.java.cartas.CartaNaufragio;
import main.java.tablero.FichaViveres;





public class Personaje {
	private Integer restos;
	public Integer getRestos() {
		return restos;
	}
	public void setRestos(Integer restos) {
		this.restos = restos;
	}


	private Integer energia;
	private Integer cantAcciones;
	private Set<Carta> habilidades;
	private Integer exploracion;
	private Integer historia;
	private Integer viveres;
	private Set<CartaNaufragio> cosasNaufragio;
	private Integer secuelas;
	private Integer decrepitud;
	private boolean esJugadorInicial;
	private boolean haDescansado;
	private boolean haEscritoDiario;
	private boolean haCogidoCC;
	static boolean noCome;
	private Vector<Personaje> personajes;
	private String nombre;
	
	public Personaje(){
		energia = 6; cantAcciones = 2; exploracion = 0; historia = 0; viveres = 0;
		secuelas = 0; decrepitud = 0; noCome = true; setHaDescansado(false); setHaEscritoDiario(false);
		setHaCogidoCC(false); esJugadorInicial = false;
	}
	public Personaje(String nombre,Integer secuelas){
		this.nombre=nombre; energia = 6; cantAcciones = 2; exploracion = 0; historia = 0; viveres = 0;
		this.secuelas = secuelas; decrepitud = 0; noCome = true; setHaDescansado(false); setHaEscritoDiario(false);
		setHaCogidoCC(false); esJugadorInicial = false;
	}
	public String getNombre(){
		return nombre;
	}
	public void setNombre(String nom){
		nombre=nom;
	}
	public Integer getSecuelas(){
		return secuelas;
	}
	public void setSecuelas(Integer secuelas){
		this.secuelas=secuelas;
	}
	public void agrupaPersonajes(Personaje p){
		if(p==null)
			throw new IllegalArgumentException("Personaje null"); 		
		personajes.add(p);
	}
	
	public Integer getViveres() {
		return viveres;
	}
	
	public void setViveres(Integer viveres){
		this.viveres = viveres;
	}
	
	public Integer getExploracion(){
		return exploracion;
	}
	
	public void setExploracion(Integer exp){
		exploracion = exp;
	}
	
	public void gastarAccion(){
		cantAcciones--;
	}
	
	public void restaurarAcciones(){
		cantAcciones = 2;
	}
	
	public Integer getNumAcciones(){
		return cantAcciones;
	}
	
	public void variarEnergia(Integer n){
		if(energia < 6 || n < 0){
			energia += n;
		}
	}
	
	public void variarHistoria(Integer n){
		if(historia < 40){
			historia += n;
		}
	}
	
	public void variarExploracion(Integer n){
		exploracion += n;
	}
	
	public void variarViveres(Integer n) {
		viveres += n;
	}
	public void variarRestos(Integer n) {
		restos+=n;
		
	}
	public void variarSecuelas(Integer n){
		secuelas += n;
	}
	
	public void decrepitud(){
		Integer d= (int) (Math.random()*6);
		if(d == 5)
			decrepitud++;
	}

	public void cambiarSecuelaPorDecrepitud(){
		secuelas--;
		decrepitud++;
	}	
	
	
	

			
	/**
	 */
	public Integer getDecrepitud(){
		return decrepitud;
	}

	public void jugadorMuere(Personaje personaje){
		personaje.eliminarPeon(personaje.getPeon());
	}
	private Peon peon;

	/**
	 * Getter of the property <tt>peon</tt>
	 * @return  Returns the peon.
	 * @uml.property  name="peon"
	 */
	public Peon getPeon() {
		return peon;
	}
	public void eliminarPeon(Peon peon) {
		peon=null;
	}
	/**
	 * Setter of the property <tt>peon</tt>
	 * @param peon  The peon to set.
	 * @uml.property  name="peon"
	 */
	public void setPeon(Peon peon) {
		this.peon = peon;
	}							


		
	public static void variarEnergiaATodosMas(Vector<Jugador> jugadores,Boolean hoguera){
		if(hoguera==true){
			for(Jugador jug: jugadores){
				jug.getPersonaje().energia+=1;
			}
		}
	}
	public static void variarEnergiaATodosMenos(Vector<Jugador> jugadores,Boolean hoguera){
		if(hoguera==false){
			for(Jugador jug: jugadores){
				jug.getPersonaje().energia-=1;
			}
		}
	}

			
			/**
			 */
			public Integer cambioEnergia(){
				return null;
			}

				
				/**
				 */
				public Integer apuestaEnergia(){
					return null;
				}


				/**
				 * @uml.property   name="jugador"
				 * @uml.associationEnd   aggregation="shared" inverse="personaje:Diagrama2.Jugador"
				 */
				private Jugador jugador;

				/**
				 * Getter of the property <tt>jugador</tt>
				 * @return  Returns the jugador.
				 * @uml.property  name="jugador"
				 */
				public Jugador getJugador() {
					return jugador;
				}

				/**
				 * Setter of the property <tt>jugador</tt>
				 * @param jugador  The jugador to set.
				 * @uml.property  name="jugador"
				 */
				public void setJugador(Jugador jugador) {
					this.jugador = jugador;
				}


				/**
				 * @uml.property   name="jugador1"
				 * @uml.associationEnd   aggregation="shared" inverse="personaje1:Diagrama2.Jugador"
				 */
				private Jugador jugador1;

				/**
				 * Getter of the property <tt>jugador1</tt>
				 * @return  Returns the jugador1.
				 * @uml.property  name="jugador1"
				 */
				public Jugador getJugador1() {
					return jugador1;
				}

				/**
				 * Setter of the property <tt>jugador1</tt>
				 * @param jugador1  The jugador1 to set.
				 * @uml.property  name="jugador1"
				 */
				public void setJugador1(Jugador jugador1) {
					this.jugador1 = jugador1;
				}


				/**
				 * @uml.property  name="jugador2"
				 * @uml.associationEnd  aggregation="shared" inverse="personaje1:fases.Jugador"
				 */
				private Jugador jugador2;

				/**
				 * Getter of the property <tt>jugador2</tt>
				 * @return  Returns the jugador2.
				 * @uml.property  name="jugador2"
				 */
				public Jugador getJugador2() {
					return jugador2;
				}

				/**
				 * Setter of the property <tt>jugador2</tt>
				 * @param jugador2  The jugador2 to set.
				 * @uml.property  name="jugador2"
				 */
				public void setJugador2(Jugador jugador2) {
					this.jugador2 = jugador2;
				}
				public void setNoCome(boolean a){
					noCome = a;
				}
				public boolean getNoCome(){
					return noCome;
				}

				public void setHaDescansado(boolean haDescansado) {
					this.haDescansado = haDescansado;
				}

				public boolean getHaDescansado() {
					return haDescansado;
				}

				public void setHaEscritoDiario(boolean haEscritoDiario) {
					this.haEscritoDiario = haEscritoDiario;
				}

				public boolean getHaEscritoDiario() {
					return haEscritoDiario;
				}

				public void setHaCogidoCC(boolean haCogidoCC) {
					this.haCogidoCC = haCogidoCC;
				}

				public boolean getHaCogidoCC() {
					return haCogidoCC;
				}

				public void setEsJugadorInicial(boolean esJugadorInicial) {
					this.esJugadorInicial = esJugadorInicial;
				}

				public boolean getEsJugadorInicial() {
					return esJugadorInicial;
				}


				public Integer getEnergia() {
					return energia;
				}
				
				public void setEnergia(Integer em){
					energia = em;
				}
				
				public Integer getHistoria() {
					return historia;
				}
				
				public void setHistoria(Integer em){
					historia = em;
				}
				
				public void setNumAcciones(Integer num){
					cantAcciones=num;
				}
				
				public String toString(){
					return nombre;
				}
}

